package cn.good.yan.controller;

import cn.good.yan.service.IMessageProvider;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 生产者 - 发送消息
 *  1. 生产者，生产消息， 消费者可以接受到，但是，如果多个消息者服务，会重复接受消息
 *  2. 解决消息重复，进行分组
 *          生产者发生消息，只能有一个服务，进行消费该消息
 *          同组一个组内产生竞争，只能其中一个可以消息
 *          解决：消费者1 和消费者2 设置同一个组名就可以
 *          group: goodA
 *  3.持久化
 *       如果配置了分组，group，也自动配置了持久化
 *       生产者服务，发送4条消息
 *       消费者1，出现故障，它的配置没有配置group，再重新启动，会有消息丢失，这4条数消息不会被消息
 *       消费者2，出现故障，它配置group，再重新启动，会继续消费这4条消息，避免消息丢失
 *
 *  演示：
 *      需要启动 注册中心、一个生产者、2个消费者、rabbit安装好
 *      访问：http://localhost:8801/t1/send   访问一次，产生一次消费
 *      2个消费者轮班 接受消息
 *      取消配置yml的分组，
 *      访问：http://localhost:8801/t1/send   访问一次，产生一次消费，此时会重复消费
 * @author shengren.yan
 * @create 2024-01-09
 */
@RestController
@RequestMapping("/t1")
@Slf4j
public class SendMessageController {

    @Resource
    private IMessageProvider messageProvider;

    // 生产者 - 发送消息
    @GetMapping(value = "/send")
    public String sendMessage() {
        return messageProvider.send();
    }

}
